package com.wecon.springdemo.pattern.template.order;

import com.alibaba.fastjson.JSON;
import com.wecon.springdemo.bean.Template;
import com.wecon.springdemo.mapper.TemplateMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author Weikang  Wang
 * @program: com.wecon.springdemo.pattern.template.order
 * @description: 公司模板：把共用的东西放到模板中，把不同的搞成抽象的让子类去实现
 * @date 2020/5/11 12:52
 */
public abstract class AbstractCompany {

    private TemplateMapper templateMapper;

    AbstractCompany(TemplateMapper templateMapper)
    {this.templateMapper = templateMapper;}

    /**
     * 模板方法：插入数据
     */
    public final void insertData(String jsonData) {

        String str = jsonData;

        // 1.改变字符串
        if (needSetString()) {
            str = setString(str);
        }
        // 2.转换对象
        List<Template> templateList = convert(str);
        // 3.插入对象
        insertTemplate(templateList);

    }

    /**
     * 设置字符串
     *
     * @param jsonData /
     * @return /
     */
    abstract String setString(String jsonData);


    /**
     * json转为List对象
     *
     * @param jsonData /
     * @return /
     */
    private List<Template> convert(String jsonData) {
        List<Template> templateList = JSON.parseArray(jsonData, Template.class);
        templateList.forEach(template -> System.out.println(template.toString()));
        return templateList;
    }

    /**
     * 插入数据
     *
     * @param list /
     */
    private void insertTemplate(List<Template> list) {
        list.forEach(template -> templateMapper.insertSelective(template));
    }

    /**
     * 设置钩子：默认需要设置字符串格式
     *
     * @return /
     */
    Boolean needSetString() {
        return true;
    }


}
